public class MaximalSquare {
    /**
     * 在一个由 '0' 和 '1' 组成的二维矩阵内，找到只包含 '1' 的最大正方形，并返回其面积。
     * @param matrix
     * @return
     */
    public int maximalSquare(char[][] matrix) {
        if (matrix.length==0||matrix[0].length==0||matrix==null){
            return 0;
        }
        int ans  = Integer.MIN_VALUE;
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] dp = new int[m][n];
        for (int i=0;i<m;i++){
            for (int j=0;j<n;j++){
                if (matrix[i][j]=='1'){
                    if (i==0||j==0){
                        dp[i][j] =1;

                    }else {
                        dp[i][j] = Math.min(dp[i-1][j],Math.min(dp[i][j-1],dp[i-1][j-1]))+1;
                    }
                    ans = Math.max(ans,dp[i][j]);

                }


            }
        }

        return ans*ans;


    }
}
